﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

namespace HelpDesk
{
    public partial class Infraestructura : System.Web.UI.Page
    {
        string operacion;
        #region Page Load
        /// <summary>
        /// Se selecciona que operacion cuando carga la pagina
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            operacion = Request.QueryString["op"]; //se captura el parametro, si es Crear, Modificar, Eliminar usuario
            switch (operacion)
            {
                case("crear"):
                    btnGuardar.Text = "Guardar";
                    lblModulo.Text = "Ingrese el nombre de infraestructura :";
                    ddlDescripcion.Visible = false;
                    break;
                case("modificar"):
                    btnGuardar.Text = "Modificar";
                    lblModulo.Text = "Seleccione la infraestructura a modificar: ";
                    lblNuevaInfraestructura.Text = "Ingrese nuevo Nombre / Infraestructura: ";
                    txtinfraestructura.Enabled = true;
                    ddlDescripcion.Visible=true;
                    LlenarDatalist();
                    btnBorrar.Visible = false;

                   break;
                case("eliminar"):
                   btnGuardar.Text = "Eliminar";
                   lblModulo.Text = "Seleccione la infraestructura a eliminar: ";
                   lblNuevaInfraestructura.Visible = false;
                   txtinfraestructura.Visible = false;
                   ddlDescripcion.Visible = true;
                   LlenarDatalist();
                   btnBorrar.Visible = false;
                   break;
            }
        }
        #endregion

        #region Llenar datos
        /// <summary>
        /// Se consulta en la base de datos las infraestructuras para mostrarlas en un ddl
        /// </summary>
        private void LlenarDatalist()
        {
            QueryBuilder objBusca = new QueryBuilder();
            DataTable tbResultadoConsulta = new DataTable();
            string sqlbusca = "SELECT DESCRIPCION FROM INFRAESTRUCTURA";
            tbResultadoConsulta = objBusca.EjecutarQuery(sqlbusca);
            for (int i = 0; i < tbResultadoConsulta.Rows.Count; i++)
            {
                ddlDescripcion.Items.Add(tbResultadoConsulta.Rows[i].ItemArray[0].ToString());
            }

        }
        #endregion

        #region Insertar Infraestructura
        /// <summary>
        /// Se hacen todas las validaciones para despues ejecutar la query en la bdd
        /// </summary>
        private void InsertaInfraestructura()
        {
            
            QueryBuilder objInserta = new QueryBuilder();
            QueryBuilder objBusca = new QueryBuilder();
            DataTable tbResultadoConsulta = new DataTable();
            string sqlinserta = "INSERT INTO INFRAESTRUCTURA (DESCRIPCION) VALUES (" + "'" + txtinfraestructura.Text.ToUpper() + "'" + ")";
            string sqlbusca = "SELECT DESCRIPCION FROM INFRAESTRUCTURA";
            ValidarDato objvalidasql = new ValidarDato();
            bool esSQLInjection = objvalidasql.esCadenaConSQL(txtinfraestructura.Text.ToUpper());
            bool esAlfanumerico = objvalidasql.esAlfanumerico(txtinfraestructura.Text.ToUpper());
            if (esAlfanumerico == true)
            {
                if (esSQLInjection == false)
                {
                    tbResultadoConsulta = objBusca.EjecutarQuery(sqlbusca);
                    bool seRealizaSQL = true;
                    for (int i = 0; i < tbResultadoConsulta.Rows.Count; i++)
                    {
                        if (string.Compare(tbResultadoConsulta.Rows[i].ItemArray[0].ToString(), txtinfraestructura.Text.ToUpper().ToString()) == 0)
                        {
                            seRealizaSQL = false;
                            break;
                        }
                    }

                    if (seRealizaSQL == true) //si todo es valido, se ejecuta la query
                    {
                        objInserta.EjecutarNoQuery(sqlinserta);
                        lblMensaje.Text = "Infraestructura Creada con Exito";
                    }
                    else
                    {
                        lblMensaje.Text = "Infraestructura ya existe, por favor ingrese otra infraestructura";
                    }
                }
                else { lblMensaje.Text = "Caracteres invalidos"; }
            }
            else { lblMensaje.Text = "No se permite el ingreso de caracteres no alfanumericos y cadenas vacias"; }
        }
        #endregion 

        #region Modificar Infraestructura
        private void ModificarInfraestructura()
        {
            string descrip = txtinfraestructura.Text.ToUpper();
            string separador = "'";
            ValidarDato objvalidasql = new ValidarDato();
            QueryBuilder objBusca = new QueryBuilder();
            DataTable tbResultadoConsulta = new DataTable();
            string sqlbusca = "SELECT DESCRIPCION FROM INFRAESTRUCTURA";
            QueryBuilder objModifica = new QueryBuilder();
            string sqlmodifica = "UPDATE INFRAESTRUCTURA SET DESCRIPCION = '" + descrip + separador + " WHERE DESCRIPCION = '" + ddlDescripcion.SelectedValue.ToString() + "'";
            bool esAlfanumerico = objvalidasql.esAlfanumerico(descrip);
            bool esSQLInjection = objvalidasql.esCadenaConSQL(descrip);
            if (esAlfanumerico == true)
            {
                if (esSQLInjection == false)
                {
                    tbResultadoConsulta = objBusca.EjecutarQuery(sqlbusca);
                    bool seRealizaSQL = true;
                    for (int i = 0; i < tbResultadoConsulta.Rows.Count; i++)
                    {
                        if (string.Compare(tbResultadoConsulta.Rows[i].ItemArray[0].ToString(), txtinfraestructura.Text.ToUpper().ToString()) == 0)
                        {
                            seRealizaSQL = false;
                            break;
                        }
                    }

                    if (seRealizaSQL == true)
                    {
                        objModifica.EjecutarNoQuery(sqlmodifica);
                        lblMensaje.Text = "Infraestructura modificada con Exito";
                    }
                    else
                    {
                        lblMensaje.Text = "Infraestructura ya existe, por favor ingrese otra infraestructura";
                    }
                }
                else { lblMensaje.Text = "Caracteres invalidos"; }
            }
            else { lblMensaje.Text = "No se permite el ingreso de caracteres no alfanumericos y cadenas vacias"; }
        }
        #endregion

        #region Eliminar Infraestructura
        private void EliminarProblema_Infraestructura()
        {
            QueryBuilder objBusca = new QueryBuilder();
            QueryBuilder objElimina2 = new QueryBuilder();
            DataTable datoID = new DataTable();
            string BuscaID = "select INFRAESTRUCTURA.ID_INFRAESTRUCTURA  FROM INFRAESTRUCTURA WHERE DESCRIPCION LIKE '" + ddlDescripcion.SelectedValue.ToString() + "'";
            datoID = objBusca.EjecutarQuery(BuscaID);
            int id_infraestructura = Convert.ToInt16(datoID.Rows[0].ItemArray[0]);
            string borrarProblema = "DELETE FROM PROBLEMA WHERE PROBLEMA.INFRAESTRUCTURA =" + id_infraestructura;
            objElimina2.EjecutarNoQuery(borrarProblema);
        }
        private void EliminarInfraestructura()
        {
            EliminarProblema_Infraestructura();
            QueryBuilder objElimina = new QueryBuilder();              
            string sqlelimina = "DELETE FROM INFRAESTRUCTURA WHERE DESCRIPCION = '" + ddlDescripcion.SelectedValue.ToString() + "'";
            objElimina.EjecutarNoQuery(sqlelimina);
        }
        #endregion

        #region BOTON GUARDAR / Crear / Modificar / Eliminar
        /// <summary>
        /// Evento que ejecuta la funcion dependiendo de la operacion que esta activa en ese momento.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            if (string.Compare(operacion, "crear") == 0)
            { 
                InsertaInfraestructura();
                txtinfraestructura.Text = "";
            }
            else if (string.Compare(operacion, "modificar") == 0)
            {
                ModificarInfraestructura();
                lblMensaje.Visible = true;
                //lblMensaje.Text = "Infraestructura modificada con Exito";
                ddlDescripcion.Items.Clear();
                txtinfraestructura.Text = "";
                LlenarDatalist();
            }
            else if (string.Compare(operacion, "eliminar") == 0)
            {
                EliminarInfraestructura();
                lblMensaje.Visible = true;
                lblMensaje.Text = "Infraestructura eliminada con Exito";
                ddlDescripcion.Items.Clear();
                LlenarDatalist();

               
            }
            //txtinfraestructura.Enabled = false;

        }
        #endregion


    }
}
